Micron Document




Java class file
part 5/9 · 24.1 KB total
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
u1: an unsigned 8-bit integer
u2: an unsigned 16-bit integer in big-endian byte order
u4: an unsigned 32-bit integer in big-endian byte order
table: an array of variable-length items of some type. The number of items in the table is identified by a preceding count number (the count is a u2), but the size in bytes of the table can only be determined by examining each of its items.

Some of these fundamental types are then re-interpreted as higher-level values (such as strings or floating-point numbers), depending on context. There is no enforcement of word alignment, and so no padding bytes are ever used. The overall layout of the class file is as shown in the following table.

| Byte offset | Size | Type or value | Description |
|---|---|---|---|
| 0 | 4 bytes | u1 = 0xCA hex | magic number (CAFEBABE) used to identify file as conforming to the class file format |
| 1 | 4 bytes | u1 = 0xFE hex | magic number (CAFEBABE) used to identify file as conforming to the class file format |
| 2 | 4 bytes | u1 = 0xBA hex | magic number (CAFEBABE) used to identify file as conforming to the class file format |
| 3 | 4 bytes | u1 = 0xBE hex | magic number (CAFEBABE) used to identify file as conforming to the class file format |
| 4 | 2 bytes | u2 | minor version number of the class file format being used |
| 5 | 2 bytes | u2 | minor version number of the class file format being used |
| 6 | 2 bytes | u2 | major version number of the class file format being used. [ 3 ] Java SE 25 = 69 (0x45 hex), Java SE 24 = 68 (0x44 hex), Java SE 23 = 67 (0x43 hex), Java SE 22 = 66 (0x42 hex), Java SE 21 = 65 (0x41 hex), Java SE 20 = 64 (0x40 hex), Java SE 19 = 63 (0x3F hex), Java SE 18 = 62 (0x3E hex), Java SE 17 = 61 (0x3D hex), Java SE 16 = 60 (0x3C hex), Java SE 15 = 59 (0x3B hex), Java SE 14 = 58 (0x3A hex), Java SE 13 = 57 (0x39 hex), Java SE 12 = 56 (0x38 hex), Java SE 11 = 55 (0x37 hex), Java SE 10 = 54 (0x36 hex), [ 4 ] Java SE 9 = 53 (0x35 hex), [ 5 ] Java SE 8 = 52 (0x34 hex), Java SE 7 = 51 (0x33 hex), Java SE 6.0 = 50 (0x32 hex), Java SE 5.0 = 49 (0x31 hex), JDK 1.4 = 48 (0x30 hex), JDK 1.3 = 47 (0x2F hex), JDK 1.2 = 46 (0x2E hex), JDK 1.1 = 45 (0x2D hex). For details of earlier version numbers see footnote 1 at The JavaTM Virtual Machine Specification 2nd edition |
| 7 | 2 bytes | u2 | major version number of the class file format being used. [ 3 ] Java SE 25 = 69 (0x45 hex), Java SE 24 = 68 (0x44 hex), Java SE 23 = 67 (0x43 hex), Java SE 22 = 66 (0x42 hex), Java SE 21 = 65 (0x41 hex), Java SE 20 = 64 (0x40 hex), Java SE 19 = 63 (0x3F hex), Java SE 18 = 62 (0x3E hex), Java SE 17 = 61 (0x3D hex), Java SE 16 = 60 (0x3C hex), Java SE 15 = 59 (0x3B hex), Java SE 14 = 58 (0x3A hex), Java SE 13 = 57 (0x39 hex), Java SE 12 = 56 (0x38 hex), Java SE 11 = 55 (0x37 hex), Java SE 10 = 54 (0x36 hex), [ 4 ] Java SE 9 = 53 (0x35 hex), [ 5 ] Java SE 8 = 52 (0x34 hex), Java SE 7 = 51 (0x33 hex), Java SE 6.0 = 50 (0x32 hex), Java SE 5.0 = 49 (0x31 hex), JDK 1.4 = 48 (0x30 hex), JDK 1.3 = 47 (0x2F hex), JDK 1.2 = 46 (0x2E hex), JDK 1.1 = 45 (0x2D hex). For details of earlier version numbers see footnote 1 at The JavaTM Virtual Machine Specification 2nd edition |
| 8 | 2 bytes | u2 | constant pool count, number of entries in the following constant pool table. This count is at least one greater than the actual number of entries; see following discussion. |
| 9 | 2 bytes | u2 | constant pool count, number of entries in the following constant pool table. This count is at least one greater than the actual number of entries; see following discussion. |
| 10 | cpsize (variable) | table | constant pool table, an array of variable-sized constant pool entries, containing items such as literal numbers, strings, and references to classes or methods. Indexed starting at 1, containing ( constant pool count - 1) number of entries in total (see note). |
| ... | cpsize (variable) | table | constant pool table, an array of variable-sized constant pool entries, containing items such as literal numbers, strings, and references to classes or methods. Indexed starting at 1, containing ( constant pool count - 1) number of entries in total (see note). |
| ... | cpsize (variable) | table | constant pool table, an array of variable-sized constant pool entries, containing items such as literal numbers, strings, and references to classes or methods. Indexed starting at 1, containing ( constant pool count - 1) number of entries in total (see note). |
| ... | cpsize (variable) | table | constant pool table, an array of variable-sized constant pool entries, containing items such as literal numbers, strings, and references to classes or methods. Indexed starting at 1, containing ( constant pool count - 1) number of entries in total (see note). |
| 10+ cpsize | 2 bytes | u2 | access flags, a bitmask |
| 11+ cpsize | 2 bytes | u2 | access flags, a bitmask |
| 12+ cpsize | 2 bytes | u2 | identifies this class, index into the constant pool to a "Class"-type entry |
| 13+ cpsize | 2 bytes | u2 | identifies this class, index into the constant pool to a "Class"-type entry |
| 14+ cpsize | 2 bytes | u2 | identifies super class, index into the constant pool to a "Class"-type entry |
| 15+ cpsize | 2 bytes | u2 | identifies super class, index into the constant pool to a "Class"-type entry |
| 16+ cpsize | 2 bytes | u2 | interface count, number of entries in the following interface table |
| 17+ cpsize | 2 bytes | u2 | interface count, number of entries in the following interface table |
| 18+ cpsize | isize (variable) | table | interface table: a variable-length array of constant pool indexes describing the interfaces implemented by this class |
| ... | isize (variable) | table | interface table: a variable-length array of constant pool indexes describing the interfaces implemented by this class |
| ... | isize (variable) | table | interface table: a variable-length array of constant pool indexes describing the interfaces implemented by this class |
| ... | isize (variable) | table | interface table: a variable-length array of constant pool indexes describing the interfaces implemented by this class |
| 18+ cpsize + isize | 2 bytes | u2 | field count, number of entries in the following field table |
| 19+ cpsize + isize | 2 bytes | u2 | field count, number of entries in the following field table |
| 20+ cpsize + isize | fsize (variable) | table | field table, variable length array of fields each element is a field_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5 |
| ... | fsize (variable) | table | field table, variable length array of fields each element is a field_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5 |
| ... | fsize (variable) | table | field table, variable length array of fields each element is a field_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5 |
| ... | fsize (variable) | table | field table, variable length array of fields each element is a field_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5 |
| 20+ cpsize + isize + fsize | 2 bytes | u2 | method count, number of entries in the following method table |
| 21+ cpsize + isize + fsize | 2 bytes | u2 | method count, number of entries in the following method table |
| 22+ cpsize + isize + fsize | msize (variable) | table | method table, variable length array of methods each element is a method_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6 |
| ... | msize (variable) | table | method table, variable length array of methods each element is a method_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6 |
| ... | msize (variable) | table | method table, variable length array of methods each element is a method_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6 |
| ... | msize (variable) | table | method table, variable length array of methods each element is a method_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6 |
| 22+ cpsize + isize + fsize + msize | 2 bytes | u2 | attribute count, number of entries in the following attribute table |
| 23+ cpsize + isize + fsize + msize | 2 bytes | u2 | attribute count, number of entries in the following attribute table |
| 24+ cpsize + isize + fsize + msize | asize (variable) | table | attribute table, variable length array of attributes each element is an attribute_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7 |
| ... | asize (variable) | table | attribute table, variable length array of attributes each element is an attribute_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7 |
| ... | asize (variable) | table | attribute table, variable length array of attributes each element is an attribute_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7 |
| ... | asize (variable) | table | attribute table, variable length array of attributes each element is an attribute_info structure defined in https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7 |
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────